package com.dkts.oil.repository;


import com.dkts.oil.mysql.entity.OilObstacle;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.session.ExecutorType;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.stereotype.Component;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;

/**
 * @author heguanglong
 * @version 1.0.0
 * @date 2024-06-21
 * @description POI导入逻辑封装
 */
@Slf4j
@Component
public class OilImportRepositoryImpl {



//    @Resource
//    private SqlSessionFactory sqlSessionFactory;



    public int batchImportPoi(List<OilObstacle> dataModelList) throws Exception {
        if(dataModelList == null || dataModelList.size() ==0){
            return 0;
        }
        return  addBatchSql(dataModelList);
    }

    public int addBatchSql(List<OilObstacle> dataModelList) throws SQLException {
//        SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false);
//        Connection connection = sqlSession.getConnection();
//        connection.setAutoCommit(false);
//        String sql="INSERT INTO `oil_obstacle_v1` (`name`,`label`,`geo_data`,`geo_hash`,`properties`,`point`,`shape_length`,`shape_area`) VALUES (?,?,ST_GeomFromText(?),?,?,POINT(?,?),?,?);";
//        PreparedStatement prepared = connection.prepareStatement(sql);
//        try {
//            for (OilObstacle a : dataModelList) {
//                try {
//                    // 设置普通字段
//                    prepared.setString(1, a.getName());
//                    prepared.setInt(2, a.getLabel());
//                    prepared.setString(3, a.getGeoData());
//                    prepared.setString(4, a.getGeoHash());
//                    prepared.setString(5, a.getProperties());
//                    prepared.setDouble(6, a.getGpsPoint().getX()); // 设置默认值 0
//                    prepared.setDouble(7,  a.getGpsPoint().getY()); // 设置默认值 0
//                    prepared.setDouble(8, a.getShapeLength());
//                    prepared.setDouble(9, a.getShapeArea());
//                    // 添加到批量操作
//                    prepared.addBatch();
//                } catch (SQLException e) {
//                    // 记录错误信息并继续执行
//                    System.err.println("Error inserting record: " + a);
//                    e.printStackTrace();
//                }
//            }
//            // 执行批量插入
//            int[] counts = prepared.executeBatch();
//            connection.commit(); // 提交事务
//            return counts.length; // 返回批量插入的记录数
//        } catch (SQLException e) {
//            // 发生异常时回滚事务
//            connection.rollback();
//            e.printStackTrace();
//            throw e; // 抛出异常
//        } finally {
//            // 关闭资源
//            try {
//                prepared.close();
//            } catch (SQLException e) {
//                e.printStackTrace();
//            }
//            try {
//                connection.close();
//            } catch (SQLException e) {
//                e.printStackTrace();
//            }
//            sqlSession.close();
//        }
        return 0;
    }
}
